iT邦幫忙

1

leetcode with python:7. Reverse Integer

  • 分享至 

  • xImage
  •  

題目:

Given a signed 32-bit integer x, return x with its digits reversed. If reversing x causes the value to go outside the signed 32-bit integer range [-2^31,2^31-1], then return 0.

Assume the environment does not allow you to store 64-bit integers (signed or unsigned).

給定一數n,回傳其反轉後的結果,但若反轉後該數超出[-2^31,2^31-1]的範圍,則回傳0

這題最麻煩的點在於不能使用[-2^31,2^31-1]範圍外的數

class Solution:
    def reverse(self, x: int) -> int:
        if x==0: #若為0則直接回傳
            return 0
        
        flag=0
        if x<0: #紀錄該數是不是負數
            x=-x
            flag=1 
            
        while x%10==0: #去除尾0
            x=x//10
        
        x=str(x) #轉字串方便操作
        
        MIN="2147483648" #判斷反轉後是否溢出
        MAX="2147483647"
        if len(x)==10: #長度10之下的數反轉也不會溢出
            if flag: #正負邊界不同
                for i in range(10):
                    if int(x[-i-1])>int(MIN[i]):
                        return 0
                    elif int(x[-i-1])<int(MIN[i]):
                        break
            else:
                for i in range(10):
                    if int(x[-i-1])>int(MAX[i]):
                        return 0 
                    elif int(x[-i-1])<int(MAX[i]):
                        break
                        
        ans=0 #反轉工程
        n=1
        for i in x:
            ans=ans+int(i)*n
            n=n*10
            
        
        if flag: #根據正負回傳
            return -ans
        else:
            return ans

開始前先紀錄該數是否是負數,若是將其轉正方便計算
接著將尾端的0全數去除,因為反轉後的數頭不該有0
再來轉字串末位往上跟最大邊界首位往下比大小
藉此判斷反轉後會不會溢出
若會則直接回傳0
判斷完我們就能安心反轉了
反轉後根據先前紀錄此數的正負回傳
最後執行時間34ms(faster than 92.06%)

那我們下題見


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言